<?php

namespace JLPay\Models\Marketing;

use JLPay\Models\BaseRequest;

/**
 * 商户活动更新请求模型
 */
class MerchantActivityUpdateRequest extends BaseRequest
{
    /**
     * 活动ID
     * @var string|null
     */
    public ?string $actId = null;

    /**
     * 商户号
     * @var string|null
     */
    public ?string $merchNo = null;

    /**
     * 商户状态
     * @var string|null
     */
    public ?string $status = null;

    /**
     * 终端号列表
     * @var array|null
     */
    public ?array $termNos = null;

    /**
     * 商户活动开始时间
     * @var string|null
     */
    public ?string $startTime = null;

    /**
     * 商户活动结束时间
     * @var string|null
     */
    public ?string $endTime = null;

    /**
     * 商户额度信息
     * @var array|null
     */
    public ?array $updateQuotas = null;

    /**
     * 设置活动ID
     *
     * @param string $actId 活动id
     * @return $this
     */
    public function setActId(string $actId): self
    {
        $this->actId = $actId;
        return $this;
    }

    /**
     * 设置商户号
     *
     * @param string $merchNo 商户号
     * @return $this
     */
    public function setMerchNo(string $merchNo): self
    {
        $this->merchNo = $merchNo;
        return $this;
    }

    /**
     * 设置商户状态
     *
     * @param string $status 商户状态，remove：移除，join：加入
     * @return $this
     */
    public function setStatus(string $status): self
    {
        $this->status = $status;
        return $this;
    }

    /**
     * 设置终端号列表
     *
     * @param array $termNos 商户号允许的参与活动的终端号,不填表示商户号下所有终端号都可参加活动
     *                       示例值：["80001599","60004404"]
     * @return $this
     */
    public function setTermNos(array $termNos): self
    {
        $this->termNos = $termNos;
        return $this;
    }

    /**
     * 设置商户活动开始时间
     *
     * @param string $startTime 格式yyyy-MM-dd HH:mm:ss 商户活动开始时间，开始时间不能早于活动ID的开始时间。不填则取活动的开始时间
     * @return $this
     */
    public function setStartTime(string $startTime): self
    {
        $this->startTime = $startTime;
        return $this;
    }

    /**
     * 设置商户活动结束时间
     *
     * @param string $endTime 格式yyyy-MM-dd HH:mm:ss 商户活动结束时间，结束时间不能晚于活动ID的结束时间。不填则取活动的结束时间
     * @return $this
     */
    public function setEndTime(string $endTime): self
    {
        $this->endTime = $endTime;
        return $this;
    }

    /**
     * 设置商户额度信息
     *
     * @param array $updateQuotas 单独为商户配置活动额度，sort_value为计费类型数组字符串，update_total为最新的额度值，单位分
     *                            具体的计费类型数组字符串，需要和活动配置的计费类型规则完全一致
     *                            商户额度只能高于活动配置的额度，不能低于活动配置的额度
     *                            示例值：[{"sort_value":"[\"01\",\"02\"]","update_total":"1001"},{"sort_value":"[\"30\",\"31\"]","update_total":"1001"}]
     * @return $this
     */
    public function setUpdateQuotas(array $updateQuotas): self
    {
        $this->updateQuotas = $updateQuotas;
        return $this;
    }

    /**
     * 获取接口路径
     *
     * @return string
     */
    public function path(): string
    {
        return "/open/org/bank/act-bridge/act-merch-relation/update";
    }

    /**
     * 将请求对象转换为数组，过滤掉值为null的字段
     *
     * @return array
     */
    public function toArray(): array
    {
        $result = [];
        if ($this->actId !== null) $result['act_id'] = $this->actId;
        if ($this->merchNo !== null) $result['merch_no'] = $this->merchNo;
        if ($this->status !== null) $result['status'] = $this->status;
        if ($this->startTime !== null) $result['start_time'] = $this->startTime;
        if ($this->endTime !== null) $result['end_time'] = $this->endTime;
        if ($this->updateQuotas !== null) $result['update_quotas'] = $this->updateQuotas;
        return $result;
    }
} 